//#include <QApplication>
//#include <QMainWindow>
//#include <QVTKOpenGLNativeWidget.h>
//#include <vtkConeSource.h>
//#include <vtkPolyDataMapper.h>
//#include <vtkActor.h>
//#include <vtkRenderer.h>
//#include <vtkGenericOpenGLRenderWindow.h>
//#include <vtkProperty.h>
//
//
//int main(int argc, char *argv[])
//{
//    QApplication app(argc, argv);
//
//    QMainWindow mainWindow;
//
//    // 设置主窗口的背景颜色（方便观察透明度）
//    //mainWindow.setStyleSheet(
//    //    "background: qlineargradient(x1:0, y1:0, x2:1, y2:1, "
//    //    "stop:0 #ff0000, stop:0.5 #00ff00, stop:1 #0000ff);");
//    // 或者使用纯色背景：
//     mainWindow.setStyleSheet("background-color: #ff9900;"); // 橙色背景
//    // mainWindow.setStyleSheet("background-color: #3366cc;"); // 蓝色背景
//
//    // 创建 VTK widget
//    QVTKOpenGLNativeWidget *vtkWidget = new QVTKOpenGLNativeWidget;
//    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
//    vtkWidget->setRenderWindow(renderWindow);
//
//    // 设置透明背景
//    renderWindow->SetAlphaBitPlanes(true);
//
//    // 创建渲染器并设置透明背景
//    vtkNew<vtkRenderer> renderer;
//    renderer->SetBackground(0, 0, 0);   // RGB
//    renderer->SetBackgroundAlpha(0.0);  // Alpha = 0 (完全透明)
//
//    // 创建一个简单的圆锥体作为示例模型
//    vtkNew<vtkConeSource> cone;
//    vtkNew<vtkPolyDataMapper> mapper;
//    mapper->SetInputConnection(cone->GetOutputPort());
//
//    vtkNew<vtkActor> actor;
//    actor->SetMapper(mapper);
//
//    // 可选：给圆锥体设置颜色以便更好观察
//    actor->GetProperty()->SetColor(1.0, 0.5, 0.0);  // 橙色圆锥
//
//    renderer->AddActor(actor);
//
//    renderWindow->AddRenderer(renderer);
//
//    // 设置 Qt 窗口透明
//    vtkWidget->setAttribute(Qt::WA_TranslucentBackground);
//    vtkWidget->setStyleSheet("background: transparent;");
//
//    mainWindow.setCentralWidget(vtkWidget);
//    mainWindow.resize(800, 600);
//    mainWindow.show();
//
//    return app.exec();
//}

//#include <QApplication>
//#include <QMainWindow>
//#include <QVTKOpenGLNativeWidget.h>
//#include <vtkConeSource.h>
//#include <vtkPolyDataMapper.h>
//#include <vtkActor.h>
//#include <vtkRenderer.h>
//#include <vtkGenericOpenGLRenderWindow.h>
//#include <vtkProperty.h>
//
//int main(int argc, char *argv[])
//{
//    QApplication app(argc, argv);
//
//    QMainWindow mainWindow;
//
//    // 设置网格背景，便于观察透明度效果
//    mainWindow.setStyleSheet(
//        "background-color: #e0e0e0; "
//        "background-image: repeating-linear-gradient(0deg, transparent, "
//        "transparent 20px, #cccccc 20px, #cccccc 40px);");
//
//    // 创建 VTK widget
//    QVTKOpenGLNativeWidget *vtkWidget = new QVTKOpenGLNativeWidget;
//    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
//    vtkWidget->setRenderWindow(renderWindow);
//
//    // 设置透明背景
//    renderWindow->SetAlphaBitPlanes(true);
//
//    // 创建渲染器并设置透明背景
//    vtkNew<vtkRenderer> renderer;
//    renderer->SetBackground(0, 0, 0);
//    renderer->SetBackgroundAlpha(0.0);  // 完全透明
//
//    // 创建圆锥体
//    vtkNew<vtkConeSource> cone;
//    cone->SetHeight(3.0);
//    cone->SetRadius(1.0);
//    cone->SetResolution(50);
//
//    vtkNew<vtkPolyDataMapper> mapper;
//    mapper->SetInputConnection(cone->GetOutputPort());
//
//    vtkNew<vtkActor> actor;
//    actor->SetMapper(mapper);
//    actor->GetProperty()->SetColor(0.2, 0.6, 1.0);  // 蓝色圆锥
//
//    renderer->AddActor(actor);
//    renderWindow->AddRenderer(renderer);
//
//    // 设置 VTK widget 透明
//    vtkWidget->setAttribute(Qt::WA_TranslucentBackground);
//    vtkWidget->setStyleSheet("background: transparent;");
//
//    mainWindow.setCentralWidget(vtkWidget);
//    mainWindow.resize(800, 600);
//    mainWindow.setWindowTitle("VTK透明背景测试 - 网格背景便于观察");
//    mainWindow.show();
//
//    return app.exec();
//}

//#include <QApplication>
//#include <QMainWindow>
//#include <QVTKOpenGLNativeWidget.h>
//#include <vtkConeSource.h>
//#include <vtkPolyDataMapper.h>
//#include <vtkActor.h>
//#include <vtkProperty.h>
//#include <vtkRenderer.h>
//#include <vtkGenericOpenGLRenderWindow.h>
//#include <vtkRenderWindowInteractor.h>
//#include <vtkCamera.h>
//#include <vtkSphereSource.h>
//
//int main(int argc, char *argv[])
//{
//    QApplication app(argc, argv);
//
//    QMainWindow mainWindow;
//    // 设置主窗口背景以便观察透明度效果
//    //mainWindow.setStyleSheet(
//    //    "background: qlineargradient(x1:0, y1:0, x2:1, y2:1, "
//    //    "stop:0 #ff6666, stop:0.5 #66ff66, stop:1 #6666ff);");
//    mainWindow.setStyleSheet("background-color: #ff9900;");  // 橙色背景
//
//    // 创建 VTK widget
//    QVTKOpenGLNativeWidget *vtkWidget = new QVTKOpenGLNativeWidget;
//    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
//    vtkWidget->setRenderWindow(renderWindow);
//
//    // === 渲染窗口配置 ===
//    renderWindow->SetAlphaBitPlanes(true);  // 启用alpha位平面
//    renderWindow->SetMultiSamples(0);       // 禁用多重采样
//
//    // === 创建模型 ===
//    vtkNew<vtkConeSource> cone;
//    cone->SetHeight(3.0);
//    cone->SetRadius(1.0);
//    cone->SetResolution(50);
//
//    vtkNew<vtkPolyDataMapper> mapper;
//    mapper->SetInputConnection(cone->GetOutputPort());
//
//    // === 创建Actor并设置颜色与透明度 ===
//    vtkNew<vtkActor> actor;
//    vtkNew<vtkProperty> prop;
//
//    prop->SetColor(1.0, 0.0, 0.0);  // RGB颜色
//    prop->SetOpacity(0.5);          // 必须设置Opacity
//
//    actor->SetProperty(prop);
//    actor->SetMapper(mapper);
//    actor->ForceOpaqueOff();      // 禁用强制不透明
//    actor->ForceTranslucentOn();  // 显式声明为透明对象
//
//    // === 创建第二个透明对象用于测试 ===
//    vtkNew<vtkSphereSource> sphere;
//    sphere->SetCenter(1.5, 0.0, 0.0);
//    sphere->SetRadius(0.8);
//
//    vtkNew<vtkPolyDataMapper> sphereMapper;
//    sphereMapper->SetInputConnection(sphere->GetOutputPort());
//
//    vtkNew<vtkActor> sphereActor;
//    vtkNew<vtkProperty> sphereProp;
//
//    sphereProp->SetColor(0.0, 0.0, 1.0);  // 蓝色
//    sphereProp->SetOpacity(0.3);          // 更透明
//
//    sphereActor->SetProperty(sphereProp);
//    sphereActor->SetMapper(sphereMapper);
//    sphereActor->ForceOpaqueOff();
//    sphereActor->ForceTranslucentOn();
//
//    // === 渲染器配置 ===
//    vtkNew<vtkRenderer> renderer;
//    renderer->AddActor(actor);
//    renderer->AddActor(sphereActor);
//
//    // 设置背景为白色（便于观察透明效果）
//    renderer->SetBackground(1.0, 1.0, 1.0);
//    renderer->SetBackgroundAlpha(1.0);  // 背景不透明，便于观察模型透明度
//
//    // 启用深度剥离
//    renderer->UseDepthPeelingOn();
//    renderer->SetMaximumNumberOfPeels(100);
//    renderer->SetOcclusionRatio(0.1);
//
//    // 设置合适的相机视角
//    renderer->ResetCamera();
//    renderer->GetActiveCamera()->Azimuth(30);
//    renderer->GetActiveCamera()->Elevation(30);
//
//    renderWindow->AddRenderer(renderer);
//    renderWindow->SetSize(800, 600);
//
//    // === Qt窗口配置 ===
//    vtkWidget->setAttribute(Qt::WA_TranslucentBackground);
//    vtkWidget->setStyleSheet("background: transparent;");
//
//    mainWindow.setCentralWidget(vtkWidget);
//    mainWindow.resize(800, 600);
//    mainWindow.setWindowTitle("VTK透明度测试 - 红色圆锥(0.5透明度) + 蓝色球体(0.3透明度)");
//    mainWindow.show();
//
//    // === 渲染并启动交互 ===
//    renderWindow->Render();
//
//    // 打印调试信息
//    std::cout << "=== 透明度配置状态 ===" << std::endl;
//    std::cout << "圆锥透明度: " << actor->GetProperty()->GetOpacity() << std::endl;
//    std::cout << "球体透明度: " << sphereActor->GetProperty()->GetOpacity() << std::endl;
//    std::cout << "深度剥离: " << (renderer->GetUseDepthPeeling() ? "启用" : "禁用") << std::endl;
//    std::cout << "最大剥离次数: " << renderer->GetMaximumNumberOfPeels() << std::endl;
//    std::cout << "Actor数量: " << renderer->GetActors()->GetNumberOfItems() << std::endl;
//
//    return app.exec();
//}


#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkConeSource.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkWindowToImageFilter.h>
#include <vtkPNGWriter.h>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建Qt窗口
    QWidget mainWidget;
    mainWidget.setWindowTitle("VTK with Transparent Background");
    mainWidget.resize(800, 600);

    // 关键设置：设置窗口透明属性
    mainWidget.setAttribute(Qt::WA_TranslucentBackground, true);
    //mainWidget.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);

    // 设置Qt widget的背景颜色（半透明）
    mainWidget.setStyleSheet("background-color: rgba(173, 216, 230, 100);");  // lightblue with alpha

    QVBoxLayout *layout = new QVBoxLayout(&mainWidget);
    layout->setContentsMargins(0, 0, 0, 0);  // 移除边距

    // 创建QVTKOpenGLNativeWidget
    QVTKOpenGLNativeWidget *vtkWidget = new QVTKOpenGLNativeWidget();
    vtkWidget->setAttribute(Qt::WA_TranslucentBackground, true);
    layout->addWidget(vtkWidget);

    // 获取VTK渲染窗口
    vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    vtkWidget->setRenderWindow(renderWindow);

    // 关键设置：启用渲染窗口的透明支持
    renderWindow->SetMultiSamples(0);    // 关闭多重采样
    renderWindow->SetAlphaBitPlanes(1);  // 启用alpha位平面

    // 创建渲染器
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();

    // 关键设置：将渲染器背景设置为透明
    renderer->SetBackground(0.0, 0.0, 0.0);  // RGB颜色
    renderer->SetBackgroundAlpha(0.0);       // 设置alpha为0（完全透明）
    renderer->GradientBackgroundOff();       // 关闭渐变背景

    // 启用深度剥离以获得更好的透明效果
    renderer->SetUseDepthPeeling(1);
    renderer->SetMaximumNumberOfPeels(100);
    renderer->SetOcclusionRatio(0.1);

    // 创建一个简单的模型（圆锥）
    vtkSmartPointer<vtkConeSource> coneSource = vtkSmartPointer<vtkConeSource>::New();
    coneSource->SetHeight(3.0);
    coneSource->SetRadius(1.0);
    coneSource->SetResolution(50);

    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(coneSource->GetOutputPort());

    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    // 将actor添加到渲染器
    renderer->AddActor(actor);

    // 将渲染器添加到渲染窗口
    renderWindow->AddRenderer(renderer);

    // 设置交互器
    vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
    renderWindow->GetInteractor()->SetInteractorStyle(style);

    // 重置相机并开始渲染
    renderer->ResetCamera();

    // 强制渲染窗口使用透明背景
    renderWindow->SetStencilCapable(1);  // 启用模板缓冲
    renderer->EraseOn();                 // 确保清除背景

    mainWidget.show();

    // 保存带有透明背景的图像
    vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter = vtkSmartPointer<vtkWindowToImageFilter>::New();
    windowToImageFilter->SetInput(renderWindow);
    windowToImageFilter->SetInputBufferTypeToRGBA();  // 记录alpha通道
    windowToImageFilter->ReadFrontBufferOff();        // 从后缓冲区读取
    windowToImageFilter->Update();

    vtkSmartPointer<vtkPNGWriter> writer = vtkSmartPointer<vtkPNGWriter>::New();
    writer->SetFileName("test_transparent.png");
    writer->SetInputConnection(windowToImageFilter->GetOutputPort());
    writer->Write();

    return app.exec();
}